package com.rem.designPattern.factory工厂方法.factoryMethoad;

/**
 * 工厂方法
 * 定义一个用于创建对象的接口，让子类决定实例化哪个产品类对象。工厂方法使一个产品类的实例化延迟到其工厂的子类
 * 工厂方法模式是简单工厂模式的进一步抽象，满足开闭原则
 * <p>
 * 抽象咖啡工厂和具体实现
 *
 * @author Rem
 * @date 2022-11-14
 */
public interface CoffeeFactory {
    /**
     * 创建咖啡对象的方法
     *
     * @return
     */
    Coffee createCoffee();
}

/**
 * 拿铁咖啡工厂
 */
class LatteCoffeeFactory implements CoffeeFactory {

    @Override
    public Coffee createCoffee() {
        return new LatteCoffee();
    }
}

/**
 * 美式咖啡工厂
 */
class AmericanCoffeeFactory implements CoffeeFactory {

    @Override
    public Coffee createCoffee() {
        return new AmericanCoffee();
    }
}